#ifndef GLWIDGET_H
#define GLWIDGET_H

#include <QOpenGLWidget>
#include <QOpenGLFunctions>
#include <QOpenGLShaderProgram>
#include <QOpenGLTexture>
#include <QTimer>
#include <QImage>

class GlWidget : public QOpenGLWidget, protected QOpenGLFunctions
{
    Q_OBJECT

public:
    explicit GlWidget(QWidget *parent = nullptr);
    ~GlWidget();

    // 设置要显示的图像
    void setImage(const QImage &image);
    
    // 获取当前图像
    QImage getImage() const;

protected:
    void initializeGL() override;
    void resizeGL(int w, int h) override;
    void paintGL() override;

private slots:
    void updateTexture();

private:
    QImage currentImage;
    QOpenGLShaderProgram *shaderProgram;
    QOpenGLTexture *texture;
    GLuint textureId;
    
    // 顶点数据
    GLfloat vertices[20];  // 位置(3) + 纹理坐标(2)
    
    // 着色器属性位置
    GLint posAttr;
    GLint texCoordAttr;
    GLint matrixUniform;
    
    // 更新纹理
    void updateTextureData();
    
    // 初始化着色器
    void initShaders();
};

#endif // GLWIDGET_H